package tp.tecnicasdisenio.model.factory;

import tp.tecnicasdisenio.dao.impl.jdbc.AlumnoDao;
import tp.tecnicasdisenio.dao.impl.jdbc.ConsultaDao;
import tp.tecnicasdisenio.dao.impl.jdbc.MateriaDao;
import tp.tecnicasdisenio.dao.impl.jdbc.TicketDao;
import tp.tecnicasdisenio.model.ReglaInterface;
import tp.tecnicasdisenio.model.accion.AccionCrearConsultaPrivada;
import tp.tecnicasdisenio.model.accion.AccionCrearTicket;
import tp.tecnicasdisenio.model.accion.AccionReenviarConsultaPrivada;
import tp.tecnicasdisenio.model.parser.ParserTituloConsultaTemaPrivada;
import tp.tecnicasdisenio.model.regla.ReglaConsultaTemaPrivada;

public class ReglaConsultaTemaPrivadaFactory implements ReglaFactoryInterface {

	public static ReglaConsultaTemaPrivadaFactory instance;
	
	private ReglaConsultaTemaPrivadaFactory(){
	}
	
	public static synchronized ReglaConsultaTemaPrivadaFactory getInstance(){
		if(instance == null){
			instance= new ReglaConsultaTemaPrivadaFactory();
		}
		return instance;
	}
	
	@Override
	public ReglaInterface crear() {
		AccionCrearConsultaPrivada accionCrearConsulta = new AccionCrearConsultaPrivada();
		accionCrearConsulta.setAlumnoDao(AlumnoDao.getInstance());
		accionCrearConsulta.setConsultaDao(ConsultaDao.getInstance());
		accionCrearConsulta.setParser(new ParserTituloConsultaTemaPrivada());
		
		AccionCrearTicket accionCrearTicket = new AccionCrearTicket();
		accionCrearTicket.setTicketDao(TicketDao.getInstance());
		accionCrearTicket.setAlumnoDao(AlumnoDao.getInstance());
		accionCrearTicket.setMateriaDao(MateriaDao.getInstance());
		accionCrearTicket.setConsultaDao(ConsultaDao.getInstance());
		accionCrearTicket.setParser(new ParserTituloConsultaTemaPrivada());
		
		AccionReenviarConsultaPrivada accionReenviarConsulta = new AccionReenviarConsultaPrivada();
		accionReenviarConsulta.setAlumnoDao(AlumnoDao.getInstance());
		accionReenviarConsulta.setMateriaDao(MateriaDao.getInstance());
		accionReenviarConsulta.setConsultaDao(ConsultaDao.getInstance());
		accionReenviarConsulta.setParser(new ParserTituloConsultaTemaPrivada());
		
		ReglaConsultaTemaPrivada reglaConsultaTema = new ReglaConsultaTemaPrivada();
		reglaConsultaTema.nuevaAccion(accionCrearConsulta);
		reglaConsultaTema.nuevaAccion(accionCrearTicket);
		reglaConsultaTema.nuevaAccion(accionReenviarConsulta);
		reglaConsultaTema.setParserTitulo(new ParserTituloConsultaTemaPrivada());
		
		return reglaConsultaTema;
	}

}
